import numpy as np

# 使用mat() 创建矩阵以 ; 隔开每一行，句号隔开行中的列。
#Python中表示复数的语法：real+imagej。注意：虚部前面必须由系数；
e = np.mat([[1,0,2j],
             [0,4,0],
             [-2j,0,0]])
print("原矩阵：\n", e)
# 共轭矩阵
print("共轭矩阵：\n", e.conjugate())
# 共轭转置
print("共轭转置: \n", e.T.conjugate())

eH=e.T.conjugate()#求矩阵的共轭转置
a=eH.dot(e)
print("矩阵的秩:",np.linalg.matrix_rank(a))#返回矩阵的秩
np.linalg.det(a) #返回矩阵的行列式
a.diagonal() #返回矩阵的对角线元素，也可以通过offset参数在主角线的上下偏移，获取偏移后的对角线元素。a.diagonal(offset=1)返回array([1.10])
a.trace()#返回迹,主对角线上各个元素的总和被称为矩阵A的迹（或迹数），一般记作tr(A)。
eigenvalues ,eigenvectors= np.linalg.eig(a) #eigenvalues 为特征值。eigenvectors为特征向量#要求是方阵
print("eigenvalues:",eigenvalues)
for λ in eigenvalues:
    eigen_matrix = a - np.eye(a.shape[0]) * λ  # 特征矩阵A-λE(对指定特征值)
    #控制输出：list保留小数位数
    print("特征值", '%.2f'%λ, "有", a.shape[0] - np.linalg.matrix_rank(eigen_matrix), "个线性无关的特征向量")  # 特征矩阵的秩